<?php
namespace ESign;

/**
 * Enables echoing and stringifying objects that implement the
 * ViewableIF interface.
 *
 * Copyright (C) 2013 OEMR 501c3 www.oemr.org
 *
 * LICENSE: This program is free software; you can redistribute it and/or
 * modify it under the terms of the GNU General Public License
 * as published by the Free Software Foundation; either version 3
 * of the License, or (at your option) any later version.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
 * GNU General Public License for more details.
 * You should have received a copy of the GNU General Public License
 * along with this program. If not, see <http://opensource.org/licenses/gpl-license.php>;.
 *
 * @package OpenEMR
 * @author  Ken Chapple <ken@mi-squared.com>
 * @author  Medical Information Integration, LLC
 * @link    http://www.open-emr.org
 **/

require_once $GLOBALS['srcdir'].'/ESign/Abstract/Model.php';
require_once $GLOBALS['srcdir'].'/ESign/ViewableIF.php';

class Viewer extends Abstract_Model
{
    public function __construct(array $args = null)
    {
        parent::__construct($args);
        
        // Force the args key => value pairs to be set as properties on the viewer objet
        $this->pushArgs(true);
    }
    
    protected function setAttributes(array $attributes)
    {
        foreach ($attributes as $key => $value) {
            $this->{$key} = $value;
        }
    }
    
    public function render(ViewableIF $viewable, array $attributes = null)
    {
        if ($attributes) {
            $this->setAttributes($attributes);
        }

        include $viewable->getViewScript();
    }
    
    public function getHtml(ViewableIF $viewable, array $attributes = null)
    {
        ob_start();
        $this->render($viewable, $attributes);
        $buffer = ob_get_clean();
        return $buffer;
    }
}
